package com.gite.nouette.admin.contract.model;

import com.gite.nouette.admin.contract.model.command.IStateCommandActivation;
import com.gite.nouette.admin.contract.observer.IObservable;
import com.gite.nouette.admin.contract.observer.IObserver;

public interface ICommand extends IModel, IObservable<ICommand>,
		IObserver<ICommand>, Runnable {
	void execute();

	void active();

	void desactive();

	boolean isActive();

	IStateCommandActivation getStateActive();

	void setStateActive(IStateCommandActivation stateActive);

	IStateCommandActivation getStateDesactive();

	void setStateDesactive(IStateCommandActivation stateDesactive);

	void initActivation(IStateCommandActivation stateCommandActive,
			IStateCommandActivation stateCommandDesactive);

	IObservable<ICommand> getObservable();

	void setObservable(IObservable<ICommand> observable);
}
